﻿using Apex.EventBus.EventBuses;
using Microsoft.AspNetCore.Builder;

namespace Apex.EventBus.Extensions
{
    public static class ApplicationBuilderExtensions
    {
        /// <summary>
        /// 添加一个扩展方法，用于在应用程序构建器中使用事件总线。
        /// </summary>
        /// <param name="appBuilder">应用程序构建器</param>
        /// <returns>已经添加了事件总线的应用程序构建器。</returns>
        public static IApplicationBuilder UseEventBus(this IApplicationBuilder appBuilder)
        {
            // 获取应用程序服务中的 IEventBus 实例
            object? eventBus = appBuilder.ApplicationServices.GetService(typeof(IEventBus));

            // 如果找不到 IEventBus 实例，则抛出一个应用程序异常
            if (eventBus == null)
            {
                throw new ApplicationException("找不到 IEventBus 实例");
            }

            // 返回应用程序构建器
            return appBuilder;
        }
    }
}
